#ifndef DW_INPUTS_COMMAND_H
#	define DW_INPUTS_COMMAND_H

#include "inputs/variable.h"

namespace dw {
	namespace inputs {

class InputCommand
{
public : //! @name Construction & Destruction
	//! @{
	InputCommand();
	~InputCommand();
	//! @}

public : //! @name Commands
	//! @{
	void addCondition(const InputCondition& condition);
	void addSampler(const InputSampler& sampler);
	//! @}

public : //! @name State
	//! @{
	bool isActive() const ;
	dw::float32 getValue(const dw::uint32 samplerId) const ;
	//! @}

protected : //! @name Commands
	//! @{
	friend class InputManager;
	virtual void update(const OIS::Keyboard* keyboard, const OIS::Mouse* mouse);
	//! @}

private : //! @name Types definitions
	//! @{
	typedef std::vector< InputCondition* > ConditionsCollection;
	typedef std::vector< InputSampler* > SamplersCollection;
	//! @}

private : //! @name Data
	//! @{
	ConditionsCollection m_conditions;
	SamplersCollection m_samplers;
	bool m_isActive;
	//! @}
};

	} // namespace inputs
} // namespace dw

#endif // !DW_INPUTS_COMMAND_H
